home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_04 / ross / compdemo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-09  |  1.9 KB  |  84 lines

  1.  
  2. Figure 5
  3. --------
  4.  
  5. A program to illustrate the use of the data compression functions.
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #define MAIN
  10. #include "hufftree.h"
  11.  
  12. #define MAXBUF 1024
  13.  
  14. /*
  15.      --------------------------- filer - main ------------------------------
  16. */
  17.  
  18. main(int argc, char *argv[])
  19. {
  20.   FILE *ftree, *indx, *in, *out;
  21.   long nrecs, end, zero = 0;
  22.   int inlen, outlen;
  23.   char bufin[MAXBUF];
  24.   char bufout[MAXBUF];
  25.   long ncharin = 0, ncharout = 0;
  26.  
  27.   if (argc != 3)
  28.   { fprintf(stderr,"Usage: %s input output\n", argv[0]);
  29.     exit(0);
  30.   }
  31.  
  32.   if ((in = fopen(argv[1], "rb")) == NULL)
  33.   { fprintf(stderr,"Unable to open input file %s\n", argv[1]);
  34.     exit(1);
  35.   }
  36.  
  37.   if ((out = fopen(argv[2], "wb")) == NULL)
  38.   { fprintf(stderr,"Unable to open output file %s\n", argv[2]);
  39.     exit(1);
  40.   }
  41.  
  42.   /* read in Huffman tree */
  43.   if ((ftree = fopen("htree.dat","rb")) == NULL)
  44.   { fprintf(stderr,"Unable to open htree.dat\n");
  45.     exit(1);
  46.   }
  47.   else
  48.   { fread(&root, sizeof(root), 1, ftree);
  49.     fread(ht, sizeof(ht), 1, ftree);
  50.     fclose(ftree);
  51.   }
  52.  
  53.   /* create index file */
  54.   if ((indx = fopen("index", "wb")) == NULL)
  55.   { fprintf(stderr,"Unable to open index file index\n");
  56.     exit(1);
  57.   }
  58.   else
  59.   { fwrite(&zero, sizeof(zero), 1, indx);
  60.     fwrite(&zero, sizeof(zero), 1, indx);
  61.     nrecs = 0;
  62.     end = 0;
  63.   }
  64.  
  65.   while (fgets(bufin, MAXBUF-1, in) != NULL)
  66.   { inlen = strlen(bufin);
  67.     ncharin += inlen;
  68.     outlen = 0;
  69.     compress(inlen, bufin, &outlen, (char *)bufout);
  70.     ncharout += outlen;
  71.     nrecs++;
  72.     end += outlen;
  73.     fwrite(&end, sizeof(end), 1, indx);
  74.     fwrite(bufout, sizeof(char), outlen, out);
  75.   }
  76.   rewind(indx);
  77.   fwrite(&nrecs, sizeof(nrecs), 1, indx);
  78.  
  79.   printf("avg chars/record in: %.2f  out:%.2f\n",
  80.     (float)ncharin/nrecs, (float)ncharout/nrecs);
  81.   printf("compression ratio: %.3f\n",(float)ncharout/(float)ncharin);
  82. }
  83.  
  84.